USE business;
GO

-- jeli w bazie istnieje procedura ...
IF OBJECT_ID('dbo.sortowanie') IS NOT NULL
	DROP PROCEDURE dbo.sortowanie;  -- ... to j usuwamy
GO

-- tworzymy now procedur
CREATE PROCEDURE dbo.sortowanie
	@kolumna SYSNAME = NULL    -- z jednym parametrem
AS
  -- deklaracja zmiennej wywietlajcej ewentualny komunikat o bdzie
	DECLARE @komunikat NVARCHAR(100);

	-- jeli parametr ma inn warto ni 'Imie', 'Nazwisko', 'Pensja' to ...
	IF (@kolumna IS NULL) OR (@kolumna NOT IN ('Imie', 'Nazwisko', 'Pensja'))
	BEGIN
		-- ... przypisywany jest komunikat bdu ...
		SET @komunikat = N'Bdna kolumna lub brak wyspecyfikowanej kolumny, wg ktrej 
ma nastpi sortowanie';
		-- ... wywietlany jest komunikat bdu ...
		RAISERROR(@komunikat, 16, 1);
		RETURN -- ... i koczona jest procedura
	END;
-- gdy zdefiniowany jest parametr, to dane z tabeli Pracownicy sortowane s
-- wg kolumny podanej w parametrze
	IF (@kolumna = 'Imie')
	BEGIN
		SELECT Nazwisko, Imie, Pensja
		FROM dbo.Pracownicy
		ORDER BY Imie
	END
	ELSE IF (@kolumna = 'Nazwisko')
	BEGIN
		SELECT Nazwisko, Imie, Pensja
		FROM dbo.Pracownicy
		ORDER BY Nazwisko
	END
	ELSE
	BEGIN
		SELECT Nazwisko, Imie, Pensja
		FROM dbo.Pracownicy
		ORDER BY Pensja
	END;
	GO

exec dbo.sortowanie @kolumna = 'Nazwisko';
